package com.hmall.api.client;

import com.hmall.api.client.fallback.ItemClientFallback;
import com.hmall.api.config.DefaultFeignConfig;
import com.hmall.api.dto.ItemDTO;
import com.hmall.api.dto.OrderDetailDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.List;

/**
 * 商品服务Feign客户端
 * 功能：通过Feign远程调用item-service的商品管理接口
 */
@FeignClient(
        value = "item-service",                // 指定服务名，用于服务发现
        configuration = DefaultFeignConfig.class, // 自定义Feign配置（日志、拦截器等）
        fallbackFactory = ItemClientFallback.class // 熔断降级工厂
)
public interface ItemClient {

    /**
     * 批量查询商品信息
     * @param ids 商品ID集合
     * @return 商品DTO列表
     * @apiNote 对应item-service的GET /items接口
     */
    @GetMapping("/items")
    List<ItemDTO> queryItemByIds(
            @RequestParam("ids") Collection<Long> ids // 将集合参数转为多个同名参数（ids=1&ids=2）
    );

    /**
     * 批量扣减商品库存
     * @param items 订单详情列表（包含商品ID和扣减数量）
     * @apiNote 对应item-service的PUT /items/stock/deduct接口
     */
    @PutMapping("/items/stock/deduct")
    void deductStock(
            @RequestBody List<OrderDetailDTO> items // 使用请求体传递复杂对象
    );

    /**
     * 查询单个商品信息
     * @param id 商品ID
     * @return 商品DTO
     * @apiNote 对应item-service的GET /items/{id}接口
     */
    @GetMapping("/items/{id}")
    ItemDTO queryItemById(
            @PathVariable("id") Long id // 路径变量，替换URL中的占位符
    );
}